<?php
/**
 * CSVを読みます.
 * プロジェクトにより、当クラスを拡張するか作り変えるかしてください.
 * @date 2008/08/28
 * @author nagai
 * @version $Id: csv_read.php 29 2009-11-26 08:23:19Z tzr250rsp $
 * @test csv_read
 * @code
 * $csv = new csv_read();//当クラスのインスタンス生成
 * //CSVファイルのpathをセット
 * $csv->setPath($csvPath);
 * //1行づつ取得します回す
 * while ($csvRow = $csv->fetchRow() ) {
 *   //データを溜める
 *   $rows[] = $csvRow;
 * }
 * //$csv->getData(); で、全てのrowsを取得できますが、処理が重くなるためあまりお勧めしません.
 * @endcode
 */
class csv_read extends griddata {

  /**
   * コンストラクタ.
   */
  public function __construct() {
    $this->init();
  }

  /**
   * init.
   * 親を叩いているだけです.
   * @see __construct()
   */
  public function init() {
    // 親を叩く
    parent::init();
  }

  /**
   * CSVパスのセッタ.
   * @param string $path
   * @throws Exception
   */
  public function setPath($path="") {

    if (0 < strlen($path)) {
      $this->path_ = $path;
    } else {
      throw new Exception("class name is:" . get_class($this). ":file path is null!!\n");
    }
    // パースを実行
    $this->_parse();
  }

  /**
   * CSVパスのゲッタ.
   * @return string
   * @throws Exception
   */
  public function getPath() {
    // ファイルパス設定してくんないと何にもできない.
    if (0 < strlen($this->path_)) {
      return $this->path_;
    } else {
      throw new Exception("class name is:" . get_class($this). ":file path is null!! please call method setPath(path)\n");
    }
  }

  /**
   * メイン処理.
   *@n 1-CSVファイル読み込み.
   *@n 2-パース実行
   */
  private function _parse() {

    //CSVファイル読み込み
    //SJIS.
    $data = lib_FileUtil::readFileToSjis( $this->getPath() );

    // CSVパーサ生成
    $objCsvP = new lib_Csv_Parse();

    // CSVデータセット
    $objCsvP->setData($data);

    // CSVパース実行
    $objCsvP->parse();

    // grid_dataクラスへ
    $this->setData( $objCsvP->getParsedData() );
  }

  /**
   * CSVパス
   */
  private $path_;

}
// end of class
?>